home *** CD-ROM | disk | FTP | other *** search
/ The PC-SIG Library 9 / The PC-SIG Library on CD ROM - Ninth Edition.iso / 501_600 / DISK0579 / DISK0579.ZIP / CHAP03.TXT < prev    next >
Text File  |  1989-12-01  |  20KB  |  473 lines

  1.  
  2.  
  3.  
  4.  
  5.                                                     Chapter 3
  6.                                             SIMPLE DATA TYPES
  7.  
  8.  
  9.  
  10. WHAT IS A DATA TYPE?
  11. ____________________________________________________________
  12.  
  13. A type in Pascal, and in several other popular programming
  14. languages, defines a variable in such a way that it defines
  15. a range of values which the variable is capable of storing,
  16. and it also defines a set of operations that are permissible
  17. to be performed on variables of that type.  TURBO Pascal has
  18. 5 basic data types which are predefined and can be used
  19. anywhere in a program provided you use them properly.  This
  20. chapter is devoted to illustrating the use of these five data
  21. types by defining the allowable range of values that can be
  22. assigned to them, and by illustrating the operations that can
  23. be done to variables of these types.  The five types and a
  24. very brief description follows;
  25.  
  26.      integer    Whole numbers from -32768 to 32767
  27.      byte       The integers from 0 to 255
  28.      real       Floating point numbers from 1E-38 to 1E+38
  29.      boolean    Can only have the value TRUE or FALSE
  30.      char       Any character in the ASCII character set
  31.  
  32. Please note that the byte type of data is not a part of the
  33. standard Pascal definition but is included as an extension to
  34. the TURBO Pascal compiler.
  35.  
  36. TURBO Pascal versions 4.0 and 5.x have three additional types
  37. available of the integer class, which are not available with
  38. version 3.0.  They are defined as follows;
  39.  
  40.      shortint   The integers from -128 to 127
  41.      word       The integers from 0 to 65535
  42.      longint    The integers from -2147483648 to 2147483647
  43.  
  44. In addition to the above data types TURBO Pascal version 4.0
  45. has the following data types available but in order to use
  46. them, you must have an 80X87 math coprocessor installed in
  47. your system;
  48.  
  49.      single     Real type with 7 significant digits
  50.      double     Real type with 15 significant digits
  51.      extended   Real type with 19 significant digits
  52.      comp       The integers from about -10E18 to 10E18
  53.  
  54. TURBO Pascal version 5.x has these four types available but
  55. because they have a software emulator for the floating point
  56. operations, an 80X87 math coprocessor is not required to use
  57. these with these versions.  Of course, your resulting program
  58.  
  59.                                                      Page 3-1
  60.  
  61.                                             Simple Data Types
  62.  
  63. will run much faster if you have the coprocessor available for
  64. use by the program.
  65.  
  66. A complete definition of the available types for each compiler
  67. can be found on pages 41 and 42 of the TURBO Pascal version
  68. 3.0 reference manual, and on pages 39 through 44 of the
  69. reference manual for version 4.0.  They are defined on pages
  70. 41 to 46 of the TURBO Pascal 5.x User's guide.  It would be
  71. good to read these pages now for a good definition prior to
  72. learning how to define and use them in a program.  Note that
  73. all of these will be used in example programs in this chapter.
  74.  
  75.  
  76.  
  77. OUR FIRST VARIABLES
  78. ____________________________________________________________
  79.  
  80. The integers are by far the easiest to       ================
  81. understand so we will start with a simple       INTVAR.PAS
  82. program that uses some integers in a very    ================
  83. simple way.  Load INTVAR.PAS into your
  84. TURBO system and let's take a look at it.
  85.  
  86. Immediately following the program statement is another
  87. reserved word, var.  This reserved word is used to define a
  88. variable before it can be used anywhere in the program.  There
  89. is an unbroken rule of Pascal that states "Nothing can be used
  90. until it is defined."  The compiler will complain by
  91. indicating a compilation error if you try to use a variable
  92. without properly defining it.  It seems a bit bothersome to
  93. have to define every variable prior to its use, but this rule
  94. will catch many spelling errors of variables before they cause
  95. trouble.  Some other languages will simply define a new
  96. variable with the new name and go merrily on its way producing
  97. some well formatted garbage for you.
  98.  
  99. Notice that there is only one var, but it is used to define
  100. three different variables, Count, X, and Y.  Once a var is
  101. recognized, the compiler will continue to recognize variable
  102. definitions line after line until it finds another reserved
  103. word.  It would be permissible to put a var on the second line
  104. also but it is not necessary.  It would also be permissible
  105. to put all three variables on one line but your particular
  106. programming style will dictate where you put the three
  107. variables.  Following the colon on each line is the word
  108. integer which is a standard identifier, and is therefore
  109. different from a reserved word.  A standard identifier is
  110. predefined like a reserved word, but you can redefine it,
  111. thereby losing its original purpose and meaning.  For now and
  112. for a long time, don't do that.  Page 38 contains a list of
  113. standard identifiers in TURBO Pascal 3.0.  There is no
  114. corresponding list in the reference manual for TURBO Pascal
  115. 4.0 or for TURBO Pascal 5.x.
  116.  
  117.  
  118.                                                      Page 3-2
  119.  
  120.                                             Simple Data Types
  121.  
  122.  
  123. OUR FIRST ARITHMETIC
  124. ____________________________________________________________
  125.  
  126. Now that we have three variables defined as integer type
  127. variables, we are free to use them in a program in any way we
  128. desire as long as we use them properly.  If we tried to assign
  129. a real value to X, the compiler will generate an error, and
  130. prevent a garbage output.  Observe the start of the main body
  131. of the program.  There are three statements assigning values
  132. to X, Y, and Count.  A fine point of mathematics would state
  133. that Count is only equal to the value of X+Y until one of them
  134. was modified, therefore the equal sign used in so many other
  135. languages is not used here.  The sign := is used, and can be
  136. read as "is replaced by the value of," when reading a listing. 
  137. Another quicker way is to use the word "gets".  Thus X := X
  138. + 1 would be read, "X gets the value of X plus 1".  We will
  139. see later that the simple equal sign is reserved for use in
  140. a different manner.
  141.  
  142. The first three statements give X the value of 12, Y the value
  143. of 13, and Count the value of 12 + 13 or 25.  If we have a
  144. requirement to get those values out of the computer, we need
  145. another extension to the Writeln statement.  The first part
  146. of the data within the parentheses should be very familiar to
  147. you now, but the second part is new.
  148.  
  149. Multiple outputs can be handled within one Writeln if the
  150. fields are separated by a comma.  To output a variable, simply
  151. write the variable's name in the output field.  The number
  152. following the variable in each case is the number of output
  153. columns to be used by the output data.  This number is
  154. optional and can be omitted allowing the system to use as many
  155. columns as it needs.  For purposes of illustration, they have
  156. all been assigned different numbers of columns.  At this
  157. point, you can compile and run INTVAR.PAS and examine its
  158. output.  
  159.  
  160. To illustrate the various ways to output    =================
  161. data, load INTVAR2.PAS and observe that        INTVAR2.PAS
  162. even though the output is identical, it is  =================
  163. output in a completely different manner. 
  164. Observe especially that a Writeln all by
  165. itself simply moves the cursor to the beginning of a new line
  166. on the video monitor.  Compile and run this program and
  167. observe its output after you are certain that the two programs
  168. are actually identical.
  169.  
  170.  
  171. NOW LET'S USE LOTS OF VARIABLES
  172. ____________________________________________________________
  173.  
  174. Load ALLVAR.PAS to observe a short program using all 5 of the
  175. basic data types.  The variables are simply assigned values
  176.  
  177.                                                      Page 3-3
  178.  
  179.                                             Simple Data Types
  180.  
  181. and the values are printed.  A complete      ================
  182. and detailed description of the options         ALLVAR.PAS
  183. available in the Write statement is given    ================
  184. in the TURBO reference manual version 3.0
  185. on pages 111 through 113, and on pages 500
  186. through 502 for version 4.0.  Pages 52 and 53 of the User's
  187. Guide has the corresponding information for TURBO Pascal
  188. version 5.x.  It would be to your advantage to read this
  189. section at this time since very little explanation will be
  190. given about Write statements from this point on.  We will
  191. discuss the method by which we can write to disk files or
  192. other output devices in a later chapter of this tutorial.
  193.  
  194. Back to the basic types.  Pascal does lots of cross checking
  195. for obvious errors.  It is illegal to assign the value of any
  196. variable with a value that is of the wrong type or outside the
  197. allowable range of that variable.  There are routines to
  198. convert from one system to another when that is necessary. 
  199. Suppose, for example, that you wished to use the value of an
  200. integer in a calculation of real numbers.  That is possible
  201. by first converting the integer into a real number of the same
  202. value and using the new real type variable in the desired
  203. calculations.  The new real type variable must of course be
  204. defined in a var statement as a real type variable before it
  205. can be used.  Details of how to do several conversions of this
  206. kind will be given in the example program named CONVERT.PAS
  207. later in this chapter.
  208.  
  209. Since we have some variables defined, it     ================
  210. would be nice to use the properties of         REALMATH.PAS
  211. computers for which they are famous,         ================
  212. namely some arithmetic.  Two programs are
  213. available for your observation to
  214. illustrate the various kinds of math available, REALMATH.PAS
  215. using real variables, and INTMATH.PAS using integer variables. 
  216. You can edit, compile, and run these on your own with no
  217. comment from me except the comments
  218. embedded into the source files.  Chapter 6  =================
  219. on pages 51 to 54 of your version 3.0          INTMATH.PAS
  220. TURBO reference manual completely defines   =================
  221. the simple mathematics available.  The
  222. corresponding list for version 4.0 is
  223. found in chapter 3 on pages 46 through 49, and pages 48
  224. through 51 of the TURBO Pascal User's Guide gives the list for
  225. version 5.x of the compiler. 
  226.  
  227. A byte type variable is used just like an integer variable but
  228. with a much smaller allowable range.  Only one byte of
  229. computer memory is used for each variable defined as a byte
  230. type variable, but 2 are used for each integer type variable.
  231.  
  232.  
  233.  
  234.  
  235.  
  236.                                                      Page 3-4
  237.  
  238.                                             Simple Data Types
  239.  
  240. BOOLEAN VARIABLES
  241. ____________________________________________________________
  242.  
  243. Let's take a look at a boolean variable, which is only allowed
  244. to take on two different values, TRUE or FALSE.  This variable
  245. is used for loop controls, end of file indicators or any other
  246. TRUE or FALSE conditions in the program.  Variables can be
  247. compared to determine a boolean value.  A complete list of the
  248. relational operators available with Pascal is given in the
  249. following list.
  250.  
  251.      =     equal to
  252.      <>    not equal to
  253.      >     greater than
  254.      <     less than
  255.      >=    greater than or equal to
  256.      <=    less than or equal to
  257.  
  258. These operators can be used to compare any   ================
  259. of the simple types of data including          BOOLMATH.PAS
  260. integer, char, byte, and real type           ================
  261. variables or constants, and they can be
  262. used to compare boolean variables.  An
  263. illustration is the best way to learn about the boolean
  264. variable so load BOOLMATH.PAS and observe it.
  265.  
  266. In BOOLMATH.PAS we define a few boolean variables and two
  267. integer type variables for use in the program and begin by
  268. assigning values to the two integer variables.  The expression
  269. Junk = Who in line 14 is actually a boolean operation that is
  270. not true since the value of Junk is not equal to the value of
  271. Who.  The result is therefore FALSE and that value is assigned
  272. to the boolean variable A.  The boolean variable B is assigned
  273. the value of TRUE because the expression Junk = (Who - 1) is
  274. true.  The boolean variables C and D are likewise assigned
  275. some values in a manner that should not need any comment. 
  276. After assigning a value to the variable with the big name, the
  277. values are all printed out.
  278.  
  279.  
  280. WHERE DO WE USE THE BOOLEAN VARIABLES?
  281. ____________________________________________________________
  282.  
  283. We will find many uses for the boolean type variable when we
  284. study the loops and conditional statements soon, but until
  285. then we can only learn what they are.  Often, in a conditional
  286. statement, you will want to do something if either of two
  287. things are true, in which case you will use the reserved word
  288. and with two boolean expressions.  If either of the two are
  289. true, the result will be true.  Line 29 is an example of this. 
  290. If the boolean variables B, C, and D, are all true, then the
  291. result will be true and A will be assigned the value of TRUE. 
  292. If any one of them is false, the result will be false and A
  293. will be assigned the value of FALSE.
  294.  
  295.                                                      Page 3-5
  296.  
  297.                                             Simple Data Types
  298.  
  299.  
  300. In Line 31, where the or operator is illustrated, if any of
  301. the three boolean variables is true, the result will be true,
  302. and if all three are false, the result will be false.  Another
  303. boolean operator is the not which is illustrated in line 30. 
  304. Examine line 33 which says the result is true only if the
  305. variable Junk is one less than Who, or if Junk is equal to
  306. Who.  
  307.  
  308. Compile and run this program, then add some additional
  309. printout to see if the boolean variables change the way you
  310. think they should in the last few statements.
  311.  
  312.  
  313. SHORT CIRCUIT OR COMPLETE EVALUATION?
  314. ____________________________________________________________
  315.  
  316. Suppose you have several boolean expressions "and"ed together,
  317. and when evaluation starts, the first expression results in
  318. a FALSE.  Since the first expression is FALSE, it is
  319. impossible for the following expressions to ever allow the
  320. final result to be TRUE because the first FALSE will force the
  321. answer to be FALSE.  It seems like a waste of execution time
  322. to continue evaluating terms if the final result is already
  323. known, but that is exactly what standard Pascal will do
  324. because of the language definition.  This is known as complete
  325. evaluation of a boolean expression.  If the system is smart
  326. enough to realize that the final result is known, it could
  327. stop evaluation as soon as the final result is known.  This
  328. is known as short circuit evaluation of a boolean expression,
  329. and could also be applied if a term of an "or"ed boolean
  330. expression resulted in a TRUE, since the result would always
  331. be TRUE.
  332.  
  333. TURBO Pascal version 3.0 always does complete evaluation of
  334. boolean expressions but TURBO Pascal versions 4.0 and 5.x
  335. allows you to choose between complete evaluation or short
  336. circuit evaluation.  The default for both compilers is the
  337. short circuit form but it can be changed through the Options
  338. menu when you are using the integrated environment, or through
  339. use of a compiler directive.
  340.  
  341.  
  342.  
  343. LET'S LOOK AT THE CHAR TYPE VARIABLE
  344. ____________________________________________________________
  345.  
  346. A char type variable is a very useful        ================
  347. variable, but usually not when used alone.     CHARDEMO.PAS
  348. It is very powerful when used in an array    ================
  349. or some other user defined data structure
  350. which is beyond the scope of this chapter. 
  351. A very simple program, CHARDEMO.PAS is included to give you
  352. an idea of how a char type variable can be used.  Study then
  353.  
  354.                                                      Page 3-6
  355.  
  356.                                             Simple Data Types
  357.  
  358. compile and run CHARDEMO.PAS for a very brief idea of what the
  359. char type variable is used for.
  360.  
  361. Examine the sample program CONVERT.PAS for  =================
  362. several examples of converting data from       CONVERT.PAS
  363. one simple variable to another.  The        =================
  364. program is self explanatory.
  365.  
  366.  
  367. THIS IS FOR TURBO PASCAL 4.0 OR 5.X USERS
  368. ____________________________________________________________
  369.  
  370. If you are using TURBO Pascal version 3.0, you are finished
  371. with this chapter because the data types illustrated in the
  372. last two programs are not available with that compiler.
  373.  
  374. If you are using TURBO Pascal 4.0 or 5.x,   =================
  375. display the program NEWINT4.PAS for an         NEWINT4.PAS
  376. example of using the extended integer       =================
  377. types available with that compiler.  Four
  378. variables are defined and values assigned
  379. to each, then the results are displayed.  When you compile and
  380. run the program, you will see that the variable Big_int can
  381. indeed handle a rather large number.
  382.  
  383. It must be pointed out that the calculation in lines 13 and
  384. 21 result in a different answer even though they appear to be
  385. calculating the same thing.  An explanation is in order.  The
  386. quantity named MaxInt used in lines 10 and 13 is a constant
  387. built into the system that represents the largest value that
  388. an integer type variable can store.  On the first page of this
  389. chapter we defined that as 32767 and when running the program
  390. you will find that Index displays that value as it should. 
  391. The constant MaxInt has a type that is of a universal_integer
  392. type as do all of the numeric constants in line 13.  The
  393. result then is calculated to the number of significant digits
  394. dictated by the left hand side of the assignment statement
  395. which is of type longint resulting in a very large number.
  396.  
  397. When we get to line 21, however, the variable Index is of type
  398. integer so the calculations are done as though the constants
  399. were of type integer also which causes some of the more
  400. significant digits to be truncated.  The truncated result is
  401. converted to type longint and assigned to the variable Big_int
  402. and the truncated value is displayed by line 22.
  403.  
  404. After that discussion it should be apparent to you that it is
  405. important what types you use for your variables.  It must be
  406. emphasized that it would not be wise to use all large type
  407. variables because they use more storage space and slow down
  408. calculations.  Experience will dictate the proper data types
  409. to use for each application.
  410.  
  411.  
  412.  
  413.                                                      Page 3-7
  414.  
  415.                                             Simple Data Types
  416.  
  417. NOW FOR THE NEW REAL TYPES
  418. ____________________________________________________________
  419.  
  420. If you are using TURBO Pascal 4.0 or 5.x,    ================
  421. display the program NEWREAL4.PAS for an        NEWREAL4.PAS
  422. example using the new "real" types           ================
  423. available with the newer versions of TURBO
  424. Pascal.  Note that you must have an 80X87
  425. math coprocessor installed to compile and run this program if
  426. you are using TURBO Pascal version 4.0.  There is a note given
  427. in the file to aid you in selecting it for use.
  428.  
  429. If you are using TURBO Pascal version 5.x, you can use the
  430. 80X87 math coprocessor, once again getting help from the note
  431. embedded in the file.  If you do not have a math coprocessor,
  432. TURBO Pascal version 5.x has an emulator mode  which can be
  433. used as instructed on page 42 of the User's Guide.  Keep in
  434. mind that, even though the emulator will allow you to use
  435. these newer data types, the resulting program will execute
  436. much slower due to the extra calculations required.
  437.  
  438. This program should be self explanatory so nothing will be
  439. said except that when you run it you can observe the relative
  440. accuracy of each of the variable types.  Once again, you
  441. should keep in mind that use of the larger "real" types costs
  442. you extra storage space and reduced run-time speed, but gives
  443. you more accuracy.
  444.  
  445.  
  446. PROGRAMMING EXERCISE
  447. ____________________________________________________________
  448.  
  449. 1.   Write a program containing several variable definitions
  450.      and do some math on them, printing out the results.
  451.  
  452.  
  453.  
  454.  
  455.  
  456.  
  457.  
  458.  
  459.  
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466.  
  467.  
  468.  
  469.  
  470.  
  471.  
  472.                                                      Page 3-8
  473.